题面传送门:P14566 【MX-S12-T1】取模
题目大意
选取一个正整数 使 数组中各项对这个正整数取模的结果的极差(即最大值与最小值的差)最大
思路讲解
由上文可知,本题是一个找最值的题目,因此考虑贪心
贪心具体分两种思路:
- 取模结果极差最大,则先找到 数组中的最大值 ,正整数 则为 。此时的结果为 数组的最大值-最小值
- 我们发现思路1无法通过样例3和4,此时考虑将直接定为 ,此时 数组中取模结果最小值为 ,最大值为 数组中的次大值
我们将这两种思路所得结果进行比较即可。
AC代码
#include<bits/stdc++.h>using namespace std;int t,n,a[100005],b1[100005],b2[100005],maxx;int main(){ cin>>t; for(int z=1;z<=t;z++){ cin>>n; maxx=-1; for(int i=1;i<=n;i++){ cin>>a[i]; maxx=max(maxx,a[i]); } for(int i=1;i<=n;i++){ b1[i]=a[i]%(maxx+1); if(maxx!=0) b2[i]=a[i]%maxx;//防止对0取余时报错 } sort(b1+1,b1+n+1);//可改为打擂台找最值 sort(b2+1,b2+n+1);;//可改为打擂台找最值 cout<<max(b1[n]-b1[1],b2[n]-b2[1])<<endl; } return 0;}













